[Mobile Hacking 12] 안드로이드 백업 취약점

[Mobile Hacking 12] 안드로이드 백업 취약점

Lecture
Security
태그
mobile hacking
security
public
완성
Y
생성일
Mar 18, 2024 05:34 AM
LectureName
Mobile Hacking (Android- checklist)

1. 안드로이드 백업 취약점


1.1 안드로이드 백업

클라우드 백업
먼 옛날 안드로이드는 구글 클라우드에 사용자 데이터와 애플리케이션 데이터를 저장하는 기능을 제공하였습나다. 이후 공장 초기화나 시스템 복구가 필요할 때 백업된 데이터를 동기화 하여 기존 데이터를 복원할 수 있게 하기 위함입니다.
 
PC백업
안드로이드 4.0으로 업데이트 되면서 백업 데이터를 사용자 PC에 저장할 수 있게 해주는 로컬백업을 지원하게 되었습니다. 사용자는 전체 백업을 통해 설치된 애플리케이션의 APK, 데이터, 저장소 등의 파일을 USB를 이용하여 PC에 저장할 수 있게 되었습니다.
 
 

1.2 백업 취약점

소개
애플리케이션 데이터의 백업이 가능할 경우, 저장된 파일이 유출될 가능성도 있으므로 보안상 취약할 수 있습니다.
 
진단
➡️ AndroidManifest.xml 에서 백업이 허용되어 있는지 확인합니다.
notion image
 
 
 

2. 실습


2.1 백업 취약점 확인

notion image
  • 해당 애플리케이션은 취약한 앱으로 소개된 insecurebankv2 입니다.
  • AndroidManifest.xml에서 allowBackup="true" 로 되어 있기 때문에 백업이 가능합니다.
  • 안드로이드 기본값은 백업 옵션이 true로 설정되어 있지 않다면 패키지의 데이터가 추출되지 않습니다.
 
 

2.2 어플리케이션 백업 진행

➡️ adb는 전체 백업특정 애플리케이션 백업을 지원합니다.
# 전체 백업 adb backup -all -apk -shared -system -f <저장파일명.ab> # 특정 애플리케이션 백업 adb backup <패키지명> -f <저장파일명.ab>
 
➡️ Insecurevankv2 앱을 백업해 보도록 하겠습니다.
# cmd adb backup com.android.insecurebankv2 -f insecurebankBackup.ab
notion image
  • Back up my data를 누르면 백업을 시작합니다.
  • 데이터가 *.ab 포멧으로 백업되게 됩니다.
  • 백업 파일은 압축된 형식의 tar 파일로 백업 정보를 담은 Manifest파일과 백업 데이터가 포함됩니다.
  • 파일 자체는 deflate 알고리즘으로 압축되어 있습니다.
 
💡
그럼 압축 해제는 어떻게 하나요?
대략 세가지 방법이 존재합니다.
  1. openssl의 zlib을 이용하여 압축 해제 (tar파일)
  1. python 으로 zlib을 import하여 tar 파일로 변환합니다.
  1. abe.jar 사용하여 언패킹합니다.
 
➡️ abe.jar을 사용한 unpack
  1. abe.jar 링크
 
  1. unpack
java -jar abe(backup_unpack).jar unpack ..\..\insecurebankBackup.ab insecurebank.tar
 
➡️ 아카이브에 포함된 리스트 별도 저장
tar -tf insecurebank.tar > insecurebankv2.list
  • 안드로이드는 백업 복원 과정에서 처음 리스트 그대로 인식하도록 되어 있습니다.
  • 리스트를 텍스트로 저장해 놓고 복원 과정을 진행하면서 처음 리스트 그대로 아카이브를 만들어야 합니다.
 
  • 백업된 리스트
apps/com.android.insecurebankv2/_manifest apps/com.android.insecurebankv2/r/app_textures apps/com.android.insecurebankv2/r/app_webview apps/com.android.insecurebankv2/r/app_webview/BrowserMetrics-spare.pma apps/com.android.insecurebankv2/r/app_webview/Default apps/com.android.insecurebankv2/r/app_webview/Default/blob_storage apps/com.android.insecurebankv2/r/app_webview/Default/blob_storage/03db73b7-3674-4dd0-a2aa-675f16a5b1be apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/CURRENT apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/000003.log apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/MANIFEST-000001 apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/LOCK apps/com.android.insecurebankv2/r/app_webview/Default/Local Storage/leveldb/LOG apps/com.android.insecurebankv2/r/app_webview/Default/Web Data-journal apps/com.android.insecurebankv2/r/app_webview/Default/Web Data apps/com.android.insecurebankv2/r/app_webview/pref_store apps/com.android.insecurebankv2/r/app_webview/webview_data.lock apps/com.android.insecurebankv2/r/app_webview/variations_stamp apps/com.android.insecurebankv2/r/app_webview/variations_seed_new apps/com.android.insecurebankv2/db/mydb-journal apps/com.android.insecurebankv2/db/mydb apps/com.android.insecurebankv2/sp/WebViewChromiumPrefs.xml apps/com.android.insecurebankv2/sp/mySharedPreferences.xml apps/com.android.insecurebankv2/sp/com.android.insecurebankv2_preferences.xml
 
 

2.3 백업된 데이터 변조

백업된 데이터는 언패킹 작업을 통해 조회가 가능하고, 수정할 수 있습니다. 여기서 해당 데이터를 변조하여 복원 작업을 수행할 수 있다면, 주요 정보를 조작할 수 있는 취약점이 존재합니다.
 
➡️ 예시로 언패킹한 tar 파일중 서버의 정보가 담겨있는 preferences.xml 파일을 변조해 보겠습니다.
 
※ 변조 전
notion image
 
※ 변조 후
notion image
 
 

2.4 패킹 후 복원

➡️ 패킹 작업 이전, 앞서 만들어놨던 리스트를 기반으로 새로운 tar 파일을 생성합니다.
C:\Users\silmu\Desktop\apk>tar -cvf new.tar -P --files-from=insecurebankv2.list
 
➡️ abe.jar 을 이용하여 다시 new.tarab 파일로 패킹합니다.
java -jar "..\분석툴\모바일\abe(backup_unpack).jar" pack new.tar insecurebank_new.ab
 
➡️ adb restore <ab파일> 명령어를 사용하여 백업 작업을 수행합니다.
notion image
 
해당 과정으로 권한 상승 및 데이터 접근 조작이 아닌 백업만을 이용하여 어플리케이션의 주요 데이터를 변조할 수 있었습니다.
 
 
 

3. 대응방안


  • 백업을 가능하게 하는 Androidmanifest 부분의 allowBackup 부분을 삭제하거나 false 로 변경하여야 합니다.